↳ Prolog
↳ PrologToPiTRSProof
samefringe_in(cons(U, V), cons(X, Y)) → U2(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
gopher_in(cons(cons(U, V), W), X) → U1(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
gopher_in(cons(nil, Y), cons(nil, Y)) → gopher_out(cons(nil, Y), cons(nil, Y))
gopher_in(nil, nil) → gopher_out(nil, nil)
U1(U, V, W, X, gopher_out(cons(U, cons(V, W)), X)) → gopher_out(cons(cons(U, V), W), X)
U2(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U3(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U3(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → U4(U, V, X, Y, samefringe_in(V1, Y1))
samefringe_in(nil, nil) → samefringe_out(nil, nil)
U4(U, V, X, Y, samefringe_out(V1, Y1)) → samefringe_out(cons(U, V), cons(X, Y))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
samefringe_in(cons(U, V), cons(X, Y)) → U2(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
gopher_in(cons(cons(U, V), W), X) → U1(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
gopher_in(cons(nil, Y), cons(nil, Y)) → gopher_out(cons(nil, Y), cons(nil, Y))
gopher_in(nil, nil) → gopher_out(nil, nil)
U1(U, V, W, X, gopher_out(cons(U, cons(V, W)), X)) → gopher_out(cons(cons(U, V), W), X)
U2(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U3(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U3(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → U4(U, V, X, Y, samefringe_in(V1, Y1))
samefringe_in(nil, nil) → samefringe_out(nil, nil)
U4(U, V, X, Y, samefringe_out(V1, Y1)) → samefringe_out(cons(U, V), cons(X, Y))
SAMEFRINGE_IN(cons(U, V), cons(X, Y)) → U21(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
SAMEFRINGE_IN(cons(U, V), cons(X, Y)) → GOPHER_IN(cons(U, V), cons(U1, V1))
GOPHER_IN(cons(cons(U, V), W), X) → U11(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
GOPHER_IN(cons(cons(U, V), W), X) → GOPHER_IN(cons(U, cons(V, W)), X)
U21(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U31(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U21(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → GOPHER_IN(cons(X, Y), cons(X1, Y1))
U31(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → U41(U, V, X, Y, samefringe_in(V1, Y1))
U31(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → SAMEFRINGE_IN(V1, Y1)
samefringe_in(cons(U, V), cons(X, Y)) → U2(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
gopher_in(cons(cons(U, V), W), X) → U1(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
gopher_in(cons(nil, Y), cons(nil, Y)) → gopher_out(cons(nil, Y), cons(nil, Y))
gopher_in(nil, nil) → gopher_out(nil, nil)
U1(U, V, W, X, gopher_out(cons(U, cons(V, W)), X)) → gopher_out(cons(cons(U, V), W), X)
U2(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U3(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U3(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → U4(U, V, X, Y, samefringe_in(V1, Y1))
samefringe_in(nil, nil) → samefringe_out(nil, nil)
U4(U, V, X, Y, samefringe_out(V1, Y1)) → samefringe_out(cons(U, V), cons(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
SAMEFRINGE_IN(cons(U, V), cons(X, Y)) → U21(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
SAMEFRINGE_IN(cons(U, V), cons(X, Y)) → GOPHER_IN(cons(U, V), cons(U1, V1))
GOPHER_IN(cons(cons(U, V), W), X) → U11(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
GOPHER_IN(cons(cons(U, V), W), X) → GOPHER_IN(cons(U, cons(V, W)), X)
U21(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U31(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U21(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → GOPHER_IN(cons(X, Y), cons(X1, Y1))
U31(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → U41(U, V, X, Y, samefringe_in(V1, Y1))
U31(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → SAMEFRINGE_IN(V1, Y1)
samefringe_in(cons(U, V), cons(X, Y)) → U2(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
gopher_in(cons(cons(U, V), W), X) → U1(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
gopher_in(cons(nil, Y), cons(nil, Y)) → gopher_out(cons(nil, Y), cons(nil, Y))
gopher_in(nil, nil) → gopher_out(nil, nil)
U1(U, V, W, X, gopher_out(cons(U, cons(V, W)), X)) → gopher_out(cons(cons(U, V), W), X)
U2(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U3(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U3(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → U4(U, V, X, Y, samefringe_in(V1, Y1))
samefringe_in(nil, nil) → samefringe_out(nil, nil)
U4(U, V, X, Y, samefringe_out(V1, Y1)) → samefringe_out(cons(U, V), cons(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
GOPHER_IN(cons(cons(U, V), W), X) → GOPHER_IN(cons(U, cons(V, W)), X)
samefringe_in(cons(U, V), cons(X, Y)) → U2(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
gopher_in(cons(cons(U, V), W), X) → U1(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
gopher_in(cons(nil, Y), cons(nil, Y)) → gopher_out(cons(nil, Y), cons(nil, Y))
gopher_in(nil, nil) → gopher_out(nil, nil)
U1(U, V, W, X, gopher_out(cons(U, cons(V, W)), X)) → gopher_out(cons(cons(U, V), W), X)
U2(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U3(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U3(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → U4(U, V, X, Y, samefringe_in(V1, Y1))
samefringe_in(nil, nil) → samefringe_out(nil, nil)
U4(U, V, X, Y, samefringe_out(V1, Y1)) → samefringe_out(cons(U, V), cons(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
GOPHER_IN(cons(cons(U, V), W), X) → GOPHER_IN(cons(U, cons(V, W)), X)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ PiDP
GOPHER_IN(cons(cons(U, V), W)) → GOPHER_IN(cons(U, cons(V, W)))
GOPHER_IN(cons(cons(U, V), W)) → GOPHER_IN(cons(U, cons(V, W)))
POL(GOPHER_IN(x1)) = 2·x1
POL(cons(x1, x2)) = 2 + 2·x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ PisEmptyProof
↳ PiDP
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
SAMEFRINGE_IN(cons(U, V), cons(X, Y)) → U21(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
U21(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U31(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U31(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → SAMEFRINGE_IN(V1, Y1)
samefringe_in(cons(U, V), cons(X, Y)) → U2(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
gopher_in(cons(cons(U, V), W), X) → U1(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
gopher_in(cons(nil, Y), cons(nil, Y)) → gopher_out(cons(nil, Y), cons(nil, Y))
gopher_in(nil, nil) → gopher_out(nil, nil)
U1(U, V, W, X, gopher_out(cons(U, cons(V, W)), X)) → gopher_out(cons(cons(U, V), W), X)
U2(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U3(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U3(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → U4(U, V, X, Y, samefringe_in(V1, Y1))
samefringe_in(nil, nil) → samefringe_out(nil, nil)
U4(U, V, X, Y, samefringe_out(V1, Y1)) → samefringe_out(cons(U, V), cons(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
SAMEFRINGE_IN(cons(U, V), cons(X, Y)) → U21(U, V, X, Y, gopher_in(cons(U, V), cons(U1, V1)))
U21(U, V, X, Y, gopher_out(cons(U, V), cons(U1, V1))) → U31(U, V, X, Y, U1, V1, gopher_in(cons(X, Y), cons(X1, Y1)))
U31(U, V, X, Y, U1, V1, gopher_out(cons(X, Y), cons(X1, Y1))) → SAMEFRINGE_IN(V1, Y1)
gopher_in(cons(cons(U, V), W), X) → U1(U, V, W, X, gopher_in(cons(U, cons(V, W)), X))
gopher_in(cons(nil, Y), cons(nil, Y)) → gopher_out(cons(nil, Y), cons(nil, Y))
U1(U, V, W, X, gopher_out(cons(U, cons(V, W)), X)) → gopher_out(cons(cons(U, V), W), X)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
U31(V1, gopher_out(cons(X1, Y1))) → SAMEFRINGE_IN(V1, Y1)
U21(X, Y, gopher_out(cons(U1, V1))) → U31(V1, gopher_in(cons(X, Y)))
SAMEFRINGE_IN(cons(U, V), cons(X, Y)) → U21(X, Y, gopher_in(cons(U, V)))
gopher_in(cons(cons(U, V), W)) → U1(gopher_in(cons(U, cons(V, W))))
gopher_in(cons(nil, Y)) → gopher_out(cons(nil, Y))
U1(gopher_out(X)) → gopher_out(X)
gopher_in(x0)
U1(x0)
U31(V1, gopher_out(cons(X1, Y1))) → SAMEFRINGE_IN(V1, Y1)
SAMEFRINGE_IN(cons(U, V), cons(X, Y)) → U21(X, Y, gopher_in(cons(U, V)))
POL(SAMEFRINGE_IN(x1, x2)) = 2 + 2·x1 + 2·x2
POL(U1(x1)) = x1
POL(U21(x1, x2, x3)) = 2·x1 + 2·x2 + 2·x3
POL(U31(x1, x2)) = 2·x1 + 2·x2
POL(cons(x1, x2)) = 2 + x1 + x2
POL(gopher_in(x1)) = x1
POL(gopher_out(x1)) = x1
POL(nil) = 0
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
U21(X, Y, gopher_out(cons(U1, V1))) → U31(V1, gopher_in(cons(X, Y)))
gopher_in(cons(cons(U, V), W)) → U1(gopher_in(cons(U, cons(V, W))))
gopher_in(cons(nil, Y)) → gopher_out(cons(nil, Y))
U1(gopher_out(X)) → gopher_out(X)
gopher_in(x0)
U1(x0)